import { $xltApi } from '@front/web-basic';
import { getToken } from '@/utils/auth';

import { uploadNetErrorEvent } from '@/utils/sentry';

$xltApi.setDefaultBaseURL(SERVICE);

// 配置 http 自定义请求头字段及请求数据格式化器
$xltApi.setDefaultCommonHeader({
  common: {
    'Content-Type': 'application/json',
    token: getToken()
  }
});

$xltApi.defaultErrorHandlers = {
  // 处理取消请求
  cancel() {
    // 忽略请求
  },

  // 处理网络断开
  network(error) {
    uploadNetErrorEvent(error);
  },

  // 处理请求超时
  timeout() {
    // 忽略请求
  },

  // 处理用户未登录异常
  notLogin() {},

  // 处理其它业务异常
  other(error) {
    uploadNetErrorEvent(error);
  }
};

// 微服务接口设置前缀
function setApiPrefix(prefix) {
  // 判断在开发环境下不存在 微服务 前缀
  return ['get', 'post', 'delete'].reduce((apis, method) => {
    apis[method] = (...args) => {
      let url = `${prefix}${args.shift()}`;
      return $xltApi[method](url, ...args);
    };
    return apis;
  }, {});
}

export { $xltApi, setApiPrefix };
